onunload 和 onload 实用程序
onunload 和 onload 实用程序提供在相同平台上使用相同数据库服务器的计算机之间移动数据的最快方法。
例如:假设您的站点购买了性能更强的 UNIX™ 计算机,使用户更快地进行访问。您需要将现有数据库传送到新计算机上的新数据库服务器。使用 onunload 从第一个数据库服务器卸载数据,然后使用 onload 将数据装入第二个数据库服务器。两个数据库服务器都必须具有相同或兼容的版本号。您可移动整个数据库或只移动选定的表,但无法修改数据库模式。
onunload 实用程序可比 dbexport 或 UNLOAD 语句更快地卸载数据,因为 onunload 以二进制格式和以页大小为单位复制数据。onload 实用程序使用 onunload 实用程序创建的磁带或文件并重新创建数据库或表。
onunload 和 onload 实用程序比 dbimport、 dbload 或 LOAD 要快,但相比之下灵活性小很多,并且不允许您修改数据库模式或从一个操作系统(或数据库服务器)版本移动到另一个。
使用 onunload 和 onload 实用程序的准则
仅当满足特定条件时,才能使用 onunload 和 onload。
仅当您对以下每个问题的答案都是是时,才可以使用 onunload 和 onload。 如果您的答案是否,那么不能使用 onunload 和 onload。
仅当对每个问题的答案都为“是”时,才可以使用 onunload 和 onload |
---|
目标数据库服务器在同一硬件平台上吗? |
想要移动到相同版本的另一数据库服务器吗? |
想要保持现有数据库模式而不进行更改吗? |
想要移动整个数据库或整个表吗? |
页面映像是兼容的吗? |
数值表示方法是相同的吗? |
无法使用 onunload 和 onload 实用程序的情况
- 在 GLS 和非 GLS 数据库之间移动数据。
- 将压缩的数据从一个数据库移到另一个。
- 在使用 onload 和 onunload 实用程序之前,您必须将压缩表和分段中的数据解压缩。
- 移动外部表或包含外部表的数据库。
- 使用 onunload 实用程序之前,必须删除所有外部表。
- 移动包含扩展或智能大对象数据类型的表和数据库
使用 onload 和 onunload 实用程序的要求
onload 和 onunload 实用程序有其局限性。这些实用程序只能用于在同一操作系统上相同版本的数据库服务器之间移动数据。您无法修改数据库模式,必须关闭日志记录,并且实用程序可能。
onload 和 onunload 实用程序具有以下要求:
- 源数据库和目标数据库必须来自相同版本的数据库服务器。不能使用 onload 和 onunload 实用程序将数据从一个版本移动到另一个。
- 您不能使用 onload 和 onunload 在不同类型的数据库服务器之间移动数据。
- onload 命令必须与相应的 onunload 命令(它卸载相同的表或 onload 引用的表)的作用域相同。例如,您无法做到先用 onunload 来卸载整个数据库,然后再使用 onload 从该数据库仅装入表子集。
- 如果数据库包含扩展或智能大对象数据类型,那么不要使用 onload 和 onunload 来移动数据。
- 因为 onload 读取的磁带包含以磁盘页大小为单位存储的二进制数据,所以源数据库所在的计算机(使用 onunload 的计算机)和目标数据库将所在的计算机(使用 onload 的计算机)必须具有相同的页大小、相同的数字数据表示法,针对结构和单位具有相同的字节对齐方式。
- 您不能使用 onload 和 onunload 在非 GLS 和 GLS 语言环境之间移动数据。
- 不能在高可用性集群中的服务器上使用 onload 和 onunload。
- 如果您压缩了表或分段,那么不能使用 onload 和 onunload。
如果 NLS 和 GLS 语言环境是相同的,那么可使用 onunload 和 onload 在数据库间移动数据。例如,如果 NLS 和 GLS 表都是使用相同的语言环境创建的,那么 onload 和 onunload 可以移动数据。但是,如果用户 A 在服务器 A 上具有法语语言环境 NLS 表并试图将数据装入服务器 B 上的德语语言环境 GLS 表,那么 onload 将报告错误。
如果页大小不同,onload 将失败。如果两台计算机上的对齐或数据类型不同(例如:最重要的字节在最后而不是第一个或者使用不同的浮点类型表示法),那么数据页面的内容会得到错误的解释。
onunload 和 onload 实用程序工作方式
onunload 实用程序会将数据库或表写入磁带或磁盘上的文件中。onload 实用程序可以将使用 onunload 命令创建的数据装入数据库服务器。
onunload 实用程序以磁盘页为单位,以二进制格式卸载数据,这使此实用程序比 dbexport 更有效。
您可使用 onunload 实用程序在具有相同版本的数据库服务器的计算机间移动数据。
您不能使用 onload 和 onunload 实用程序将数据从数据库服务器的一个版本移动到另一版本,也不能在不同类型的数据库服务器之间移动。此外,onload 命令必须与相应的 onunload 命令(它卸载相同的表或 onload 引用的表)的作用域相同。例如,您无法做到先用 onunload 来卸载整个数据库,然后再使用 onload 从该数据库仅装入表子集。
onload 实用程序在指定的数据库空间中创建数据库或表。 然后,onload 实用程序向它装入来自 onunload 实用程序创建的输入磁带或磁盘文件的数据。
装入期间,您可将存储在 Blobspace 中的简单大对象移动到另一 Blobspace 。
onunload 命令的语法
onunload 命令从数据库卸载数据并将数据库或表写入磁带或磁盘上的文件中。
元素 | 用途 | 重要注意事项 |
---|---|---|
database | 指定数据库的名称 | 其他信息:不能使用数据库服务器名 (database@dbservername) 限定数据库名称。 |
owner. | 指定表的所有者 | 其他信息:所有者名称不能包含无效字符。 |
table | 指定表名 | 要求:表必须存在。 |
如果未指定任何目标参数选项,那么 onunload 将使用 TAPEDEV 指定的设备。Block 大小和磁带大小分别是 TAPEBLK 和 TAPESIZE 指定的值。(有关 TAPEDEV、TAPEBLK 和 TAPESIZE 的信息,请参阅《GBase 8s 管理员参考》。)
-V 选项显示软件版本号和序列号。-version 选项扩展了 -V 选项,以显示有关内部版本操作系统、构建号和构建日期的其他信息。
onunload 目标参数
onunload 实用程序支持磁带或文件目标选项。
以下语法图分段显示 onunload 目标参数
元素 | 用途 | 重要注意事项 |
---|---|---|
-b blocksize | 指定磁带设备的块大小(以千字节计) | 要求:blocksize 必须是整数。 其他信息:此选项覆盖了 TAPEBLK 或 LTAPEBLK 中的缺省值。 |
-l | 指示 onunload 分别从 LTAPEDEV、LTAPEBLK 和 LTAPESIZE 读取磁带设备、块大小和磁带大小的值 | 无。 |
-s tapesize | 指定存储在磁带上的数据量(以KB为单位) | 要求:tapesize 必须是整数。要写到磁带的末尾,请将磁带大小指定为 0。 如果您不指定 0,那么最大的 tapesize 是 2 097 151 KB。 其他信息:此选项覆盖 TAPESIZE 或 LTAPESIZE 中的缺省值。 |
-t source | 指定磁盘上文件的路径名或安装输入磁带的磁带设备的路径名 | 其他信息:此选项覆盖 TAPEDEV 或 LTAPEDEV 指定的磁带设备。路径名必须是有效的路径名。 |
影响 onunload 的约束
当使用 onunload 实用程序时,您必须注意可影响 onunload 磁带上的数据装入方式的约束。
以下约束适用于 onunload:
- 必须将 onunload 磁带上的数据装入您的数据库服务器管理的数据库或表中。
- 如果数据库包含扩展数据类型,则不能使用 onunload 和 onload 。
- 您要将 onunload 写入的磁带装入的计算机必须与原计算机有相同的页大小以及相同的数字数据表示法。
- 您必须使用相同版本的数据库服务器的 onload 实用程序读取 onunload 创建的文件。不能使用 onunload 和 onload 将数据从一种版本移动到另一种版本。
- 卸载完整的数据库时,您不能修改数据库对象(例如表、索引和视图)的所有权,直到完成重新装入数据库为止。
- 卸载和装入表时,onunload 不保留与原表相关联的访问特权、同义词、视图、约束、触发器或缺省值。运行 onunload 之前,请使用 dbschema 实用程序获取访问特权、同义词、视图、约束、触发器和缺省值的列表。完成装入表之后,请使用 dbschema 重新创建表的特定信息。
数据库或表卸载权限
要卸载数据库,您必须对数据库具有 DBA 权限或是用户 gbasedbt。要卸载表,您必须拥有该表、该表所在的数据库的DBA 特权或是用户 gbasedbt。
用户 root 不具有 onunload 和 onload的特权。
与数据库一起卸载的表
如果卸载数据库,将卸载数据库中的所有表(包括系统目录表)。
同时也将卸载该数据库中的所有表的所有触发器、SPL 例程、缺省值、约束和同义词。
与表一起卸载的数据
如果卸载表,onunload 将从 systables、systables、syscolumns、sysindexes 和 sysblobs 系统目录表卸载表数据和信息。
卸载表时,onunload 不会卸载有关与表关联的约束、触发器或缺省值的信息。另外,将不会卸载为表定义的访问权限以及与该表相关联的同义词或视图。
卸载操作期间锁定
卸载操作期间,以共享方式锁定数据库或表。如果 onunload 无法获得共享锁定,那么将返回错误。
日志记录方式
onunload 实用程序不保留数据库的日志记录方式。使用 onload 装入数据库后,您可使数据库符合 ANSI 标准或添加日志记录。
有关日志记录方式的信息,请参阅《GBase 8s SQL 指南:语法》。
装入期间,您可将存储在 Blob 空间中的简单大对象移动到另一 Blob 空间。
如果没有指定任何源参数选项,onload 将使用 TAPEDEV 指定的设备。块大小和磁带大小分别是 TAPEBLK 和 TAPESIZE 指定的值。(有关 TAPEDEV、TAPEBLK 和 TAPESIZE 的更多信息,请参阅《GBase 8s 管理员指南》。)
如果没有指定创建选项,onload 将在根数据库空间中存储数据库或表。
onload 命令的语法
onload 命令将使用 onunload 命令创建的数据装入数据库服务器。
元素 | 用途 | 重要注意事项 |
---|---|---|
-ddbspace | 将数据库或表装入指定数据库 | 正在装入的磁带必须包含指定的数据库或表。 |
database | 指定数据库的名称 | 数据库名不能包含数据库服务器名称,例如 database@dbservername。 |
owner. | 指定表的所有者 | 所有者名称不能包含无效字符。 |
table | 指定表名 | 表必须存在。 |
-V 选项显示软件版本号和序列号。-version 选项扩展了 -V 选项,以显示有关内部版本操作系统、内部版本号和内部版本日期的其他信息。
onload 源参数
onload 命令含有指定磁带或文件源相关信息的选项。
以下语法图显示 onload 源参数。
元素 | 用途 | 重要注意事项 |
---|---|---|
-b blocksize | 指定磁带设备的块大小(以千字节计) | 要求:无符号整数。必须指定磁带设备的块大小。 其他信息:此选项覆盖了 TAPEBLK 或 LTAPEBLK 中的缺省值。 |
-l | 指示 onload 分别从配置参数 LTAPEDEV、LTAPEBLK 和 LTAPESIZE 读取磁带设备、块大小和磁带大小的值 | 其他信息:如果您先指定 -l,然后指定 -b、-s 或 -t,指定的值将覆盖配置文件中的值。 |
-s tapesize | 以千字节为单位指定数据库服务器可在磁带上存储的数据量 | 要求:无符号整数。要写到磁带的末尾,请将磁带大小指定为 0。 如果您不指定 0,那么最大的 tapesize 是 2 097 151 KB。 其他信息:此选项覆盖 TAPESIZE 或 LTAPESIZE 中的缺省值。 |
-t source | 指定磁盘上文件的路径名或安装输入磁带的磁带设备的路径名 | 必须是合法路径名。 其他信息:此选项覆盖 TAPEDEV 或 LTAPEDEV 指定的磁带设备。 参考:有关路径名的语法,请参阅操作系统文档。 |
onload 创建选项
onload 命令包含用于重新创建数据库的信息。
以下语法图分段显示 onload 创建选项。
元素 | 用途 | 重要注意事项 |
---|---|---|
-c oldcnstrnt newcnstrnt | 指示 onload 重命名指定的约束。 | 无。 |
-i oldindex newindex | 指示 onload 在磁盘上存储索引时重命名表索引。 | 其他信息: 在装入期间使用 -i 选项重命名索引以避免与现有的索引名称冲突。 |
-fd olddbsp newdbsp | 将数据分段从一个数据库空间移到另一个。 | 新数据库空间必须存在且必须不包含表的另一个数据分段。 其他信息: 此选项用于并行数据查询 (PDQ) 和表分段存储。 |
-fi indexname olddbs newdbsp | 将索引分段从一个数据库空间移到另一个。 | 新数据库空间必须存在且必须不包含表的另一个索引分段。 其他信息: 此选项用于 PDQ 和表分段存储。 |
database | 指定数据库的名称 | 要求:数据库名不能包含数据库服务器名称,例如 database@dbservername。 |
owner. | 指定表的所有者 | 要求:所有者名称不能包含无效字符。 |
table | 指定表名 | 要求:表必须不存在。 |
如果没有为非分段表指定任何创建选项,onload 实用程序将在根数据库空间中存储数据库或表。
若为分段表,onunload 会保留分段存储表达式以供 onload 在以后使用。因此,导入表的分段方式与原始表相同。
只要使用唯一,您就可以随时以任何顺序使用 -c、-i、-fd和 -fi 选项。
影响 onunload 的约束
onload 实用程序比 dbimport、dbload 或 LOAD 方法执行得要快。为了获得较高的性能,onload 具有一定约束。
onload 实用程序具有以下约束:
- onload 实用程序只创建新的数据库或表;运行 onload 之前,您必须删除或重命名相同名称的现有数据库或表。执行期间,onload 实用程序的提示将询问您是否要重命名。
- 装入期间 onload 实用程序在数据库中的每个表上放置共享锁定。即使您无法正确更新带锁的表行,数据库还是可用于查询。
- 装入完整的数据库时,运行 onload 的用户将成为数据库的所有者。
- onload 实用程序创建的数据库不带日志记录;您必须在 onload 装入数据库后启动日志记录。
- 使用 onload 将表装入已记录日志的数据库时,操作期间必须关闭数据库的日志记录。
- 对于分段的表,会保留指定的数据库空间信息,除非您使用 -fn 选项将其覆盖。
- 对于非分段的表,如果未使用 -d 选项指定目标数据库空间,那么 onload 实用程序会尝试在根数据库空间中存储表。如果由于页大小不同而无法将表存储在根数据库空间或使用 -d 选项指定的数据库空间中,那么 onload 实用程序会尝试使用数据库空间编号与最初所卸载表的数据库空间编号相同的数据库空间。如果此数据库空间仍然具有不同的页面大小,那么装入操作将失败。
装入期间的日志记录
使用 onload 实用程序创建表时,onload 只可以将信息装入不带日志记录的数据库。因此,将表装入现有的、已日志记录的数据库之前,必须结束该数据库的日志记录。
您可能还需要在非高峰时间进行装入。否则可能填满逻辑日志文件或花费过多的共享内存资源。装入表后,在继续数据库记录日志之前,请创建 0 级数据库空间备份。
使用 onload 创建数据库时,得到的数据库不符合 ANSI 标准且不使用事务日志记录。装入数据库后可使数据库符合 ANSI 标准或添加日志记录。
onload 实用程序在事务中执行其所有装入。如果错误发生,此功能允许回滚更改。
将简单大对象移至 Blobspace
如果装入的表包含存储在 Blobspace 中的简单大对象,onload 实用程序将询问您是否希望将它们移动到另一个 Blobspace。
如果您回答是,onload 将显示当创建磁带时存储该简单大对象的 Blobspace 名称。然后它将请求您输入您希望用来存储该简单大对象的 Blobspace 名称。
如果输入有效的 Blobspace 名称,onload 将把表中所有的简单大对象列移动到新的 Blobspace。否则,onload 将再次提示您输入有效的 Blobspace 名称。
所有权和特权
装入新数据库时,运行 onload 实用程序的用户成为所有者。数据库中(表、视图和索引)的所有权与使用 onunload 将数据库卸载到磁带时的所有权相同。
要装入表,您必须在数据库上拥有 Resource 特权。当 onload 装入新表时,运行 onload 的用户将成为所有者,除非您在表名中指定了所有者。(要在表名中指定所有者,您需要对数据库有 DBA 特权。)
onunload 实用程序不保留同义词或访问特权。要获取已定义的同义词或访问特权的列表,请在运行 onunload 之前使用 dbschema 实用程序(在dbschema 实用程序中描述)。
装入操作期间锁定
装入操作期间,onload 实用程序放置对新数据库或表的互斥锁。
装入过程作为单个事务进行,而当发生错误或系统故障时,onload 将删除新的数据库或表。
在计算机之间移动数据库
您可以使用 onunload 和 onload 实用程序将完整的数据库从一台计算机移动到另一台。
将数据库从一台计算机移动到另一台计算机:
-
确保两台计算机上的页大小、数字表示以及字节对齐相同。
在某些 UNIX™ 系统上,页面大小为 2 KB。页大小是 GBase 8s 的特征。有关页大小的信息,请参阅《GBase 8s 管理员指南》。数字表示和字节对齐是操作系统特征。
-
决定存储已卸载数据的地方:
- 在磁盘上。为 onunload 创建一个空文件来保存数据。确保您拥有此文件的写许可权。
- 在磁带上。使用在 ONCONFIG 配置文件中由 TAPEDEV 或 LTAPEDEV 配置参数指定的磁带设备和特征,或指定另一个磁带设备。请确保您指定的磁带设备可用于 onunload。但是,如果将 TAPEDEV 配置参数设置为 STDIO,那么 onunload 实用程序将无法卸载数据。
-
运行 oncheck 实用程序以确保数据库的一致性。
有关 oncheck 的信息,请参阅《GBase 8s 管理员参考》。
-
运行 onunload 实用程序从数据库卸载数据。
有关 onunload 命令语法的详细信息,请参阅 onunload 命令的语法。
-
如果需要,将存储介质(磁带或磁盘)传送到新计算机。
如果两台计算机位于同一网络上,您可远程读取或写入数据。
-
运行 onload 实用程序将数据装入新数据库。
有关 onload 命令语法的详细信息,请参阅 onload 命令的语法。
-
为新数据库设置日志记录状态。
有关日志记录状态的信息,请参阅《GBase 8s 管理员指南》。
-
如果需要,更改数据库的 DBA 特权。
-
创建新数据库的 0 级备份。
在计算机之间移动表
您可以使用 onunload 和 onload 实用程序将表从同一台计算机上的一个数据库空间移动到另一个。
将表从一台计算机移动到另一台计算机:
-
确保两台计算机上的页大小、数字表示以及字节对齐相同。(在某些 UNIX™ 系统上,页大小为 2 KB。)
-
决定存储已卸载数据的地方。
-
运行 oncheck 实用程序以确保数据库的一致性。
-
如果希望保存表的触发器、访问特权、SPL 例程、缺省值、约束和同义词,请运行 dbschema 实用程序。
-
运行 onunload 实用程序。
有关 onunload 命令语法的详细信息,请参阅 onunload 命令的语法。
-
如果需要,将存储介质传送到新计算机。
-
如果表包含存储在 Blobspace 中的简单大对象,那么确定在何处存储简单大对象。如果需要,可创建新的 Blobspace。
-
关闭日志记录。
装入表时,必须关闭目标数据库上的日志记录。(创建和装入整个数据库时,日志记录的状态并不重要。)
-
运行 onload 实用程序。
有关 onload 命令语法的详细信息,请参阅 onload 命令的语法。
-
创建已修改数据库的 0 级备份。
-
打开日志记录(如果您需要日志记录)。
-
如果希望恢复表的触发器、访问特权、SPL 例程、缺省值、未保留的约束以及同义词,请运行 dbschema 实用程序或手动重新创建这些对象。
即使是单个表,主键或缺省值之类的约束也都会保留。外键、访问特权、SPL 例程和同义词不会保留。
在数据库空间之间移动表
您可以使用 onunload 和 onload 实用程序将表从同一台计算机上的一个数据库空间移动到另一个。
将表从同一台计算机上的一个数据库空间移动到另一个数据库空间:
- 运行 onunload 实用程序卸载表。
- 有关 onunload 命令语法的详细信息,请参阅 onunload 命令的语法。
- 关闭日志记录。
- 装入表时,必须关闭目标数据库上的日志记录。
- 运行 onload 实用程序。
- 在 onload 命令中指定新表名和新数据库空间名称。
- 有关 onload 命令语法的详细信息,请参阅 onload 命令的语法。
- 如果数据成功装入,删除旧数据库空间中的旧表,并将新表重命名为旧表名。
- 创建已修改数据库的 0 级备份。
- 打开日志记录(如果您需要日志记录)。